CF 1632C
题目内容
给定两个整数
- 以
的代价令 或 - 以
的代价令
求令
特殊的数据范围:
解法
提示一
别傻看着题干了,列一列代价的式子。
提示二
有必要进行多次操作二吗?仔细想一想,并给出是或不是的详细证明。
提示三
对任意
解答
事实是,我们最多只需要进行一次操作二,进行多次操作二一定是不优的。简单证明如下:显然我们不需要一口气进行两次操作二。那么假设我们在两次操作二之间插入一次操作一,则后面的这次操作二无论如何都是没有必要的。
搞清楚这点之后我们的思路就清晰很多了。分两种情况讨论:
不进行操作一。代价显然为
进行操作一。何时进行?我们需要详细分析这些操作的代价,由于一旦执行操作后
- 若
与 当位均为 或 ,保持原状即可。 - 若
当位为 , 当位为 ,同样保持原状即可。 - 若
当位为 , 当位为 ,若存在 为 且 对应位为 的更高位,则可以通过加一定值“移走” 的这个 使得取或后该位结果为 ;但若不存在这样的位,保持原状即可。
时间复杂度为
AC 代码
见提交记录。
感想
看到这种最小化代价的题目无从下手,就得尝试列式子找规律,说不定就发现某些方便处理的式子。
还有就是一定得注意某些特殊的数据范围,一般都是突破口。